package com.indra.bbva.pe.monitor.in.controller;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ComponentSystemEvent;
import javax.faces.model.SelectItem;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import com.indra.bbva.pe.monitor.in.bo.iface.ConsultaCargaBOIface;
import com.indra.bbva.pe.monitor.in.bo.iface.ParametrosBOIface;
import com.indra.bbva.pe.monitor.in.utils.Util;
import com.pe.bbva.utils.Constantes;
import com.stefanini.pe.bbva.bp.monitor.in.to.MonitorOpeTO;

@Controller(value="consultaCargaProcesosController")
@RequestScoped
public class ConsultaCargaProcesosController extends GenericoController{
	private static final Logger log = Logger.getLogger(ConsultaCargaProcesosController.class);
	
	@Autowired
	private ConsultaCargaBOIface consultaCargaBOIface;
	@Autowired
	private ParametrosBOIface parametrosBOIface;
	
	private List<MonitorOpeTO> listaLogCarga;
	public Date fechaDesde;
	public Date fechaHasta;
	public String estadoCarga;
	public List<SelectItem> listaEstadosCarga;
	
	public void onPageLoad(ComponentSystemEvent event) {
		try{
			if (!FacesContext.getCurrentInstance().isPostback()) {
				System.out.println("ConsultaCargaProcesosController... is not Postback");
				
				listaLogCarga = new ArrayList<MonitorOpeTO>();
				listaEstadosCarga = new ArrayList<SelectItem>();
				cargarComboEstados();
			}
		}catch(Exception e){
			log.error("Error interno. ",e);
		}
	}
	
	public void validateDateListener(){
		isRangoFechasOk();
	}
	
	private boolean isRangoFechasOk(){
		if(Util.esFecha1MayorFecha2(fechaDesde, fechaHasta)){
			mostrarWarning(Constantes.MSG_ERROR_RANGO_FECHAS);
			return false;
		}
		return true;
	}
	
	private void cargarComboEstados() throws Exception{
		listaEstadosCarga=Util.ObjectToSelectItem(parametrosBOIface.consultaEstadoOpeCarga(), 
				"descripcion", "idEstadoOpe");
	}

	public void buscar(){
		if(isRangoFechasOk()){
			listaLogCarga = new ArrayList<MonitorOpeTO>();
			try{
				listaLogCarga = consultaCargaBOIface.consultaLogCarga(Util.getFormatDateStore(fechaDesde),
					Util.getFormatDateStore(fechaHasta),Util.getNullCombo(estadoCarga));
			}catch(Exception e){
				log.error("Error interno. ",e);
				mostrarError("Error interno. "+Util.obtenerMensajeError(e));
			}
		}
	}

	public String getEstadoCarga() {
		return estadoCarga;
	}

	public void setEstadoCarga(String estadoCarga) {
		this.estadoCarga = estadoCarga;
	}

	public Date getFechaDesde() {
		return fechaDesde;
	}

	public void setFechaDesde(Date fechaDesde) {
		this.fechaDesde = fechaDesde;
	}

	public Date getFechaHasta() {
		return fechaHasta;
	}

	public void setFechaHasta(Date fechaHasta) {
		this.fechaHasta = fechaHasta;
	}

	public List<MonitorOpeTO> getListaLogCarga() {
		return listaLogCarga;
	}

	public void setListaLogCarga(List<MonitorOpeTO> listaLogCarga) {
		this.listaLogCarga = listaLogCarga;
	}
}
